package com.controleFamiliar.action;

import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;

import com.controleFamiliar.dao.FontePagadoraDAO;
import com.controleFamiliar.enumeration.FormasPagamento;
import com.controleFamiliar.facade.FontePagadoraFacade;
import com.controleFamiliar.facade.ReceitaFacade;
import com.controleFamiliar.form.ReceitaForm;
import com.controleFamiliar.pojo.FontePagadora;
import com.controleFamiliar.pojo.Receita;
import com.controleFamiliar.pojo.Usuario;

public class ReceitaAction extends DispatchAction{
	
	public static final String FORWARD = "editarReceita";
		
	public ActionForward iniciarCadastroReceita(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		ReceitaForm formulario = (ReceitaForm) form;
		//Caso haja algum erro retorna para a tela de cadastro
		String forward = FORWARD;
		formulario.limpar();
		try{
		FontePagadoraFacade facade = new FontePagadoraFacade();
		List<FontePagadora> listaFontes = facade.listarTodasFontePagadoras();
		request.setAttribute("listaFontes", listaFontes);
		
//		ReceitaFacade facade2 = new ReceitaFacade();
//		List<Receita> listaReceitas = facade2.listarTodasReceitas();
//		request.setAttribute("listaReceitas", listaReceitas);
		
		}catch(Exception e){
			throw e;
		}	
		return mapping.findForward(forward);
	}
	
	
	public ActionForward salvarReceita(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		ReceitaForm formulario = (ReceitaForm) form;
		try{
		ReceitaFacade facade = new ReceitaFacade();
		FontePagadoraFacade fonteFacade = new FontePagadoraFacade();
		
		Receita receita = this.preencherPOJO(formulario); 
		//validar permissão do usuário para essa função		
		Usuario usuario = (Usuario)request.getSession().getAttribute("usuario");
		
		receita.setCodUsuario(Integer.parseInt(usuario.getCodUsuario().toString()));
		receita.setCodFontePagadora(fonteFacade.obter(Integer.parseInt(formulario.getCodFontePagadora())));
		
		facade.salvarReceita(receita);
		
		request.setAttribute("message", "Receita salva com sucesso");
		}catch(Exception e){
			throw e;
		}	
		return this.iniciarCadastroReceita(mapping, formulario, request, response);
	}
	
	/**
	 * Remove uma categoria previamente cadastrada.
	 * @param mapping
	 * @param form
	 * @param request
	 * @param response
	 * @return
	 * @throws Exception
	 */
	public ActionForward removerReceita(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		ReceitaForm formulario = (ReceitaForm) form;		
//		try{
//		ReceitaFacade facade = new ReceitaFacade();
//		facade.removerReceita(Integer.parseInt(formulario.getCodReceita()));
//		request.setAttribute("message", "Receita removida com sucesso");
//		}catch(Exception e){
//			throw e;
//		}	
		return this.iniciarCadastroReceita(mapping, formulario, request, response);
	}
	
	private Receita preencherPOJO(ReceitaForm formulario) throws Exception{
		Receita receita = new Receita();
		FontePagadoraFacade fonteFacade = new FontePagadoraFacade();
		
		formulario.setValor(formulario.getValor().replace(",", "."));
		
		receita.setDeclaravel(formulario.getDeclaravel());
		receita.setValor(Double.parseDouble(formulario.getValor()));
		FontePagadora fonte = fonteFacade.obter(Integer.parseInt(formulario.getCodFontePagadora()));
		receita.setCodFontePagadora(fonte);
		
		SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
		receita.setDataRecebimento(sdf.parse(formulario.getDtReceita()));
		
		return receita;		
	}
	

}
